home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_02_04 / 2n04032a < prev    next >
Text File  |  1991-02-23  |  3KB  |  90 lines

  1. {Listing 4 -- floppy.h}
  2.  
  3. /*
  4. **  Definitions for the Floppy Disk Controller (FDC) ports and commands.
  5. */
  6.  
  7. typedef unsigned char byte;
  8.  
  9. /* FDC Ports addresses */
  10. #define FdcOutputRegister   (0x03f2)
  11. #define FdcStatusRegister   (0x03f4)
  12. #define FdcCommandRegister  (0x03f4)
  13. #define FdcDataRegister     (0x03f5)
  14.  
  15. /* FDC data macros */
  16. #define fdcSetDOR(value)    outportb(FdcOutputRegister, (value))
  17. #define fdcWriteCmd(value)  outportb(FdcDataRegister, (value))
  18. #define fdcGetStatus()      inportb(FdcStatusRegister)
  19. #define fdcGetResult()      inportb(FdcDataRegister)
  20.  
  21. /* FDC Digital Output Register (DOR) Commands */
  22. #define FdcDorDrive0Select  (0x00)
  23. #define FdcDorDrive1Select  (0x01)
  24. #define FdcDorDrive2Select  (0x02)
  25. #define FdcDorDrive3Select  (0x03)
  26. #define FdcDorReset         (0x00)
  27. #define FdcDorClearReset    (0x04)
  28. #define FdcDorDmaDisable    (0x00)
  29. #define FdcDorDmaEnable     (0x08)
  30. #define FdcDorDriveOn       (0x10)
  31.  
  32. /* FDC Main Status Register (MSR) bit flags */
  33. #define FdcMsrDrive0Seek    (0x01)   /* Drive 0 is seeking */
  34. #define FdcMsrDrive1Seek    (0x02)   /* Drive 1 is seeking */
  35. #define FdcMsrDrive2Seek    (0x04)   /* Drive 2 is seeking */
  36. #define FdcMsrDrive3Seek    (0x08)   /* Drive 3 is seeking */
  37. #define FdcMsrFdcBusy       (0x10)   /* Read/Write in progress */
  38. #define FdcMsrExecMode      (0x20)   /* non-DMA Execute phase */
  39. #define FdcMsrDirection     (0x40)   /* set if FDC->CPU */
  40. #define FdcMsrRequest       (0x80)   /* set if ready for master to read */
  41.  
  42. /* FDC Commands */
  43. #define FdcCmdSpecify       (0x03)   /* Set FDC parameters */
  44. #define FdcCmdSenseDrive    (0x04)   /* Get drive state */
  45. #define FdcCmdSenseInt      (0x08)
  46. #define FdcCmdRecalibrate   (0x07)
  47. #define FdcCmdSeek          (0x0f)
  48. #define FdcCmdRead      (0x06 | 0x80)   /* Read, Multitrack */
  49. #define FdcCmdReadTrack     (0x02)
  50. #define FdcCmdWrite     (0x05 | 0x80)   /* Write, Multitrack */
  51. #define FdcCmdFormatTrack   (0x0d)
  52.  
  53. /* DMA Defines */
  54. #define DmaFdcChannel   (0x02)
  55. #define DmaMaskPort     (0x0a)
  56. #define DmaModePort     (0x0b)
  57. #define DmaFFPort       (0x0c)
  58. #define DmaAddrPort     (2 * DmaFdcChannel)
  59. #define DmaWcPort       (DmaAddrPort + 1)
  60. #define DmaPagePort     (0x81)
  61. #define DmaCmdRead      (0x44 | DmaFdcChannel)
  62. #define DmaCmdWrite     (0x48 | DmaFdcChannel)
  63.  
  64. /* Convert a far pointer to a long */
  65. #define ptrToLong(ptr)  ((((unsigned long)FP_SEG(ptr)) \
  66. << 4) + FP_OFF(ptr))
  67.  
  68. /* Global data */
  69. extern byte Results[7];
  70.  
  71. /* Function protoypes */
  72. void fdcSetDriveParms(byte srt, byte hut, byte hlt);
  73. void fdcResetParms(void);
  74. void fdcReset(void);
  75. void fdcSelectDrive(byte drive);
  76. int fdcSpecify(void);
  77. unsigned fdcSenseDrive(void);
  78. unsigned fdcSenseInterrupt(void);
  79. unsigned fdcRecalibrate(void);
  80. unsigned fdcSeek(int head, int cylinder);
  81. unsigned fdcReadSectors(int sector, unsigned nsect, void* buffer);
  82. unsigned fdcReadTrack(void* buffer);
  83. unsigned fdcWriteSectors(int sector, unsigned nsect, void* buffer);
  84. unsigned fdcFormatTrack(void* buffer);
  85. int fdcSendCmd(byte* cmd, unsigned cmdlen);
  86. void fdcWaitForInt(void);
  87. int fdcResultPhase(int immediate, int nres);
  88. int dmaPageTest(byte far* buf, unsigned length);
  89. int dmaSetup(int fcn, unsigned nbytes, void far* addr);
  90.